package com.delivery.www.service.ServiceImpl;

import com.delivery.www.dao.DaoImpl.HaveCouponDaoImpl;
import com.delivery.www.dao.HaveCouponDao;
import com.delivery.www.po.Coupon;
import com.delivery.www.po.HaveCoupon;
import com.delivery.www.service.HaveCouponService;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;

/**
 * @author 12970
 */
public class HaveCouponServiceImpl implements HaveCouponService {
    private final HaveCouponDao haveCouponDao = new HaveCouponDaoImpl();

    @Override
    public HaveCoupon ifExist(int couponId, int userId) {
        HaveCoupon haveCoupon = null;
        if (couponId > 0 && userId > 0) {
            haveCoupon = haveCouponDao.ifExist(couponId, userId);
        }
        return haveCoupon;
    }

    @Override
    public String add(int couponId, int userId, int storeId, int status) {
        if (couponId <= 0 || userId <= 0 || storeId <= 0 || status < 0) {
            return "error";
        } else {
            HaveCoupon haveCoupon = ifExist(couponId, userId);
            if (haveCoupon != null && haveCoupon.getStatus() == 0) {
                return "exist";
            }
            Date date = new Date();
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String time = dateFormat.format(date);
            int i = haveCouponDao.add(couponId, time, userId, storeId, status);
            if (i > 0) {
                return "ok";
            } else {
                return "error";
            }
        }
    }

    @Override
    public List<HaveCoupon> getUserCoupon(int userId, int storeId, int status) {
        if (userId <= 0 || storeId <= 0 || status < 0) {
            return null;
        } else {
            return haveCouponDao.getUserCoupon(userId, storeId, status);
        }
    }

    @Override
    public List<HaveCoupon> getCoupon(int userId) {
        if (userId > 0) {
            return haveCouponDao.getCoupon(userId);
        } else {
            return null;
        }
    }

    @Override
    public List<HaveCoupon> modifyStatusOver(List<Coupon> coupons, List<HaveCoupon> userCoupon) {
        if (coupons == null || userCoupon == null) {
            return null;
        } else {
            Date date = new Date();
            long dateTime = date.getTime();
            List<HaveCoupon> haveCoupons = new ArrayList<>();
            for (Coupon coupon : coupons) {
                long validity = coupon.getValidity();
                validity = validity * 24 * 60 * 60 * 1000;
                for (HaveCoupon haveCoupon : userCoupon) {
                    if (Objects.equals(haveCoupon.getCouponId(), coupon.getCouponId())) {
                        Timestamp time = haveCoupon.getTime();
                        if (time != null) {
                            long parseTime = time.getTime();
                            long total = parseTime + validity;
                            if (total < dateTime && haveCoupon.getStatus() == 0) {
                                for (int i = 0; i < userCoupon.size(); i++) {
                                    if (haveCoupon == userCoupon.get(i)) {
                                        userCoupon.remove(i);
                                        break;
                                    }
                                }
                                haveCoupons.add(haveCoupon);
                            }
                            break;
                        }
                    }
                }
            }
            if (haveCoupons.size() != 0) {
                List<HaveCoupon> list = haveCouponDao.modifyStatusOver(haveCoupons);
                userCoupon.addAll(list);
            }
            System.out.println("service" + userCoupon);
            return userCoupon;
        }
    }
}
